home *** CD-ROM | disk | FTP | other *** search
/ Sky at Night 2007 June / SAN CD 6-2007 CD-ROM 25.iso / pc / Software / AstroGrav_Win / Java / jre1.6.0 / lib / rt.jar / java / lang / Shutdown.class (.txt) < prev    next >
Encoding:
Java Class File  |  2006-11-29  |  2.2 KB  |  135 lines

  1. package java.lang;
  2.  
  3. import java.util.ArrayList;
  4.  
  5. class Shutdown {
  6.    private static final int RUNNING = 0;
  7.    private static final int HOOKS = 1;
  8.    private static final int FINALIZERS = 2;
  9.    private static int state = 0;
  10.    private static boolean runFinalizersOnExit = false;
  11.    private static ArrayList<Runnable> hooks = new ArrayList();
  12.    private static Object lock = new Lock((1)null);
  13.    private static Object haltLock = new Lock((1)null);
  14.  
  15.    static void setRunFinalizersOnExit(boolean var0) {
  16.       synchronized(lock) {
  17.          runFinalizersOnExit = var0;
  18.       }
  19.    }
  20.  
  21.    static void add(Runnable var0) {
  22.       synchronized(lock) {
  23.          if (state > 0) {
  24.             throw new IllegalStateException("Shutdown in progress");
  25.          } else {
  26.             hooks.add(var0);
  27.          }
  28.       }
  29.    }
  30.  
  31.    static boolean remove(Runnable var0) {
  32.       synchronized(lock) {
  33.          if (state > 0) {
  34.             throw new IllegalStateException("Shutdown in progress");
  35.          } else if (var0 == null) {
  36.             throw new NullPointerException();
  37.          } else {
  38.             return hooks == null ? false : hooks.remove(var0);
  39.          }
  40.       }
  41.    }
  42.  
  43.    private static void runHooks() {
  44.       for(Runnable var1 : hooks) {
  45.          try {
  46.             var1.run();
  47.          } catch (Throwable var4) {
  48.             if (var4 instanceof ThreadDeath) {
  49.                ThreadDeath var3 = (ThreadDeath)var4;
  50.                throw var3;
  51.             }
  52.          }
  53.       }
  54.  
  55.    }
  56.  
  57.    static void halt(int var0) {
  58.       synchronized(haltLock) {
  59.          halt0(var0);
  60.       }
  61.    }
  62.  
  63.    static native void halt0(int var0);
  64.  
  65.    private static native void runAllFinalizers();
  66.  
  67.    private static void sequence() {
  68.       synchronized(lock) {
  69.          if (state != 1) {
  70.             return;
  71.          }
  72.       }
  73.  
  74.       runHooks();
  75.       boolean var0;
  76.       synchronized(lock) {
  77.          state = 2;
  78.          var0 = runFinalizersOnExit;
  79.       }
  80.  
  81.       if (var0) {
  82.          runAllFinalizers();
  83.       }
  84.  
  85.    }
  86.  
  87.    static void exit(int var0) {
  88.       boolean var1 = false;
  89.       synchronized(lock) {
  90.          if (var0 != 0) {
  91.             runFinalizersOnExit = false;
  92.          }
  93.  
  94.          switch (state) {
  95.             case 0:
  96.                state = 1;
  97.             case 1:
  98.             default:
  99.                break;
  100.             case 2:
  101.                if (var0 != 0) {
  102.                   halt(var0);
  103.                } else {
  104.                   var1 = runFinalizersOnExit;
  105.                }
  106.          }
  107.       }
  108.  
  109.       if (var1) {
  110.          runAllFinalizers();
  111.          halt(var0);
  112.       }
  113.  
  114.       synchronized(Shutdown.class) {
  115.          sequence();
  116.          halt(var0);
  117.       }
  118.    }
  119.  
  120.    static void shutdown() {
  121.       synchronized(lock) {
  122.          switch (state) {
  123.             case 0:
  124.                state = 1;
  125.             case 1:
  126.             case 2:
  127.          }
  128.       }
  129.  
  130.       synchronized(Shutdown.class) {
  131.          sequence();
  132.       }
  133.    }
  134. }
  135.